In some computing systems, information stored in memory is protected by encryption. Some such systems, particularly for cloud-based usages, provide cryptographic memory integrity by way of Multi-Key Total Memory Encryption (MKTME). These and other key-based encryption technologies have a fundamental scaling problem. Specifically, MKTME uses bits of a physical address to select cryptographic keys, and page table entries include key identifiers (KeyIDs) to identify the keys.
Typical page table entries are 64 bits, providing just enough space to encode a 64 bit physical address as a 52 bit memory page address. That only leaves 12 bits for page table permissions, memory types, present, accessed/dirty, etc., with remaining page table entry bits used by software. As such, current implementations cannot specify KeyIDs in page table entries without limiting the addressable memory space. One solution is to increase the page table entry size, but this comes at a high price, changing fundamental system software/paging kernels, among other performance and efficiency issues. Further while the physical address space issue can be mitigated non-architecturally (not exposed to software), by simply adding more physical address bits to caches and buses, or by introducing additional cached metadata, the page table encodings are architectural and exposed to software.